package com.jar.exercise.多线程.threadlocal;

import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class ThreadLocalTest {

	public static void main(String[] args) throws InterruptedException {

		final int _8M = 1024 * 1024 * 8;

		List<SoftReference<byte[]>> softReferences = new ArrayList<>();

		softReferences.add(new SoftReference<>(new byte[_8M]));

		System.out.println("添加8M"); // 够用

		softReferences.add(new SoftReference<>(new byte[_8M]));

		System.out.println("添加8M"); // 够用

		softReferences.add(new SoftReference<>(new byte[_8M]));
		System.out.println("添加8M"); // 不够用 （会把软引用的对象回收掉）

		// 手动执行GC,让它回收
		System.gc();

		// 这里让主线程等待下，目的是为了让GC立即执行，因为GC这个线程的优先级比较低
		TimeUnit.SECONDS.sleep(1);

		softReferences.forEach(res -> System.out.println(res.get()));

	}

}
